const User = require('../models/User');
const Joi = require('joi');

// 验证规则
const updateSchema = Joi.object({
  name: Joi.string().min(2).max(10).required(),
  email: Joi.string().email().optional().allow(''),
  city: Joi.string().optional().allow(''),
  gender: Joi.string().valid('male', 'female').optional(),
  avatar: Joi.string().optional().allow('')
});

// 专门的头像上传处理
const uploadAvatar = async (req, res) => {
  try {
    console.log('=== 头像上传开始 ===');
    console.log('请求方法:', req.method);
    console.log('请求URL:', req.url);
    console.log('用户信息:', req.user);
    console.log('上传文件:', req.file);
    
    // 检查认证
    if (!req.user || !req.user.userId) {
      console.log('用户认证信息缺失');
      return res.status(401).json({ message: '用户未认证' });
    }

    if (!req.file) {
      console.log('没有接收到文件');
      return res.status(400).json({ message: '请选择头像文件' });
    }

    const userId = req.user.userId;
    const avatarFilename = req.file.filename; // 确保这是文件名，不是完整路径
    
    console.log('用户ID:', userId, '文件名:', avatarFilename);
    
    // 详细检查文件状态
    const fs = require('fs');
    const filePath = req.file.path;
    console.log('文件保存路径:', filePath);
    console.log('文件大小:', req.file.size);
    
    try {
      const stats = fs.statSync(filePath);
      console.log('文件状态:', stats);
      console.log('文件是否存在:', fs.existsSync(filePath));
    } catch (fileError) {
      console.error('文件状态检查失败:', fileError);
      return res.status(500).json({ message: '文件保存失败: ' + fileError.message });
    }
    
    console.log('准备更新数据库...');

    // 更新用户头像字段 - 确保只存储文件名
    try {
      const success = await User.update(userId, { avatar: avatarFilename }); // 只存储文件名
      console.log('数据库更新结果:', success);
      
      if (!success) {
        console.log('用户不存在，ID:', userId);
        return res.status(404).json({ message: '用户不存在' });
      }
    } catch (dbError) {
      console.error('数据库更新失败:', dbError);
      return res.status(500).json({ message: '数据库更新失败: ' + dbError.message });
    }

    console.log('头像更新成功，文件名:', avatarFilename);
    
    // 返回文件名，不是完整路径
    res.json({
      message: '头像上传成功',
      url: `/images/avatars/${avatarFilename}`,
      filename: avatarFilename // 确保返回的是纯文件名
    });
    
    console.log('=== 头像上传完成 ===');
  } catch (error) {
    console.error('头像上传未知错误:');
    console.error('错误名称:', error.name);
    console.error('错误信息:', error.message);
    console.error('错误堆栈:', error.stack);
    res.status(500).json({ message: '头像上传失败: ' + error.message });
  }
};

// 更新用户信息
const updateUser = async (req, res) => {
  try {
    console.log('updateUser 被调用');
    
    // 验证请求数据
    const { error, value } = updateSchema.validate(req.body);
    if (error) {
      return res.status(400).json({ message: error.details[0].message });
    }

    const userId = req.user.userId;

    // 如果有上传的头像文件
    if (req.file) {
      value.avatar = req.file.filename;
      console.log('头像上传成功，文件名:', value.avatar);
    }

    // 更新用户信息
    const success = await User.update(userId, value);
    if (!success) {
      return res.status(404).json({ message: '用户不存在' });
    }

    // 获取更新后的用户信息
    const user = await User.findById(userId);
    
    console.log('用户信息更新成功');
    res.json({
      message: '更新成功',
      user
    });
  } catch (error) {
    console.error('更新用户信息错误:', error);
    res.status(500).json({ message: '服务器错误，更新失败' });
  }
};

// 获取用户信息
const getUser = async (req, res) => {
  try {
    console.log('getUser 被调用');
    
    const userId = req.user.userId;
    const user = await User.findById(userId);

    if (!user) {
      return res.status(404).json({ message: '用户不存在' });
    }

    // 如果用户有头像，确保返回的是文件名，不是完整路径
    if (user.avatar) {
      // 如果存储的是完整路径，提取文件名
      if (user.avatar.includes('/')) {
        const parts = user.avatar.split('/');
        user.avatar = parts[parts.length - 1]; // 取最后一部分作为文件名
        console.log('修复头像路径，提取文件名:', user.avatar);
      }
    }

    res.json({ user });
  } catch (error) {
    console.error('获取用户信息错误:', error);
    res.status(500).json({ message: '服务器错误' });
  }
};

// 明确导出所有函数
module.exports = {
  uploadAvatar,
  updateUser,
  getUser
};